/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle;

import java.awt.event.ActionEvent;
import java.io.IOException;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import modelo.CoordenadorCurso;
import modelo.Login;
import org.primefaces.context.RequestContext;
import persistencia.CoordenadorCursoFacade;
import persistencia.LoginFacade;

/**
 *
 * @author Diego
 */
@ManagedBean
@SessionScoped
public class MbLogin implements Serializable {

    private Login login;
    @EJB
    LoginFacade ejbLoginFacade;
    @EJB
    CoordenadorCursoFacade ejbCoordenadorCursoFacade;

    public MbLogin() {
        login = new Login();
//        try
//        {
//            FacesContext.getCurrentInstance().getExternalContext().redirect("faces/view/padrao.xhtml");
//        } catch (Exception ex)
//        {
//            Logger.getLogger(MbLogin.class.getName()).log(Level.SEVERE, null, ex);
//        }
    }

    public Login getLogin() {
        return login;
    }

    public void setLogin(Login login) {
        this.login = login;
    }

    public boolean isLogado() {
        return !(login.getLogin().isEmpty());
    }

    public void login(ActionEvent actionEvent) {

        RequestContext context = RequestContext.getCurrentInstance();
        FacesMessage msg = null;

        Login us = ejbLoginFacade.getLogin(login);

        try {
            if (us != null && us.getDocente().getCoordenadorCursoList().size() > 0) {

                Date data = us.getDocente().getCoordenadorCursoList().get(0).getCoordenadorCursoPK().getCrscrdDtinicio();
                String codigo = "";
                for (CoordenadorCurso coordenadorCurso : us.getDocente().getCoordenadorCursoList()) {
                    if (coordenadorCurso.getCoordenadorCursoPK().getCrscrdDtinicio().compareTo(data) > 0) {
                        data = coordenadorCurso.getCoordenadorCursoPK().getCrscrdDtinicio();
                        codigo = coordenadorCurso.getCurso().getCrsCodigo();
                    }
                }

                List<CoordenadorCurso> lista = ejbCoordenadorCursoFacade.findAll();

                boolean bol = false;
                for (CoordenadorCurso coordenadorCurso : lista) {
                    if (data.compareTo(coordenadorCurso.getCoordenadorCursoPK().getCrscrdDtinicio()) > 0 && coordenadorCurso.getCurso().getCrsCodigo().equals(codigo)) {
                        bol = true;
                    }
                }

                if (!bol) {
                    try {
                        login = us;
                        FacesContext.getCurrentInstance().getExternalContext().redirect("faces/view/Coordenador/padrao.xhtml");
                    } catch (IOException ex) {
                        Logger.getLogger(MbLogin.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    try {
                        login = us;
                        FacesContext.getCurrentInstance().getExternalContext().redirect("faces/view/Professor/padrao.xhtml");
                    } catch (IOException ex) {
                        Logger.getLogger(MbLogin.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                
            } else {
                if (us != null && us.getDocente().getCoordenadorCursoList().size() == 0) {
                    try {
                        login = us;
                        FacesContext.getCurrentInstance().getExternalContext().redirect("faces/view/Professor/padrao.xhtml");
                    } catch (IOException ex) {
                        Logger.getLogger(MbLogin.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                msg = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao Logar", "Usuario ou Senha incorretos.");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception ex) {
            Logger.getLogger(MbLogin.class.getName()).log(Level.SEVERE, null, ex);
            msg = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao Logar", "Ocorreu um erro no sistema\nTente mais tarde.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void logout() {
        try {
            RequestContext context = RequestContext.getCurrentInstance();
            this.login = new Login();
            FacesContext.getCurrentInstance().getExternalContext().redirect("/Sagrau/");
        } catch (IOException ex) {
            Logger.getLogger(MbLogin.class.getName()).log(Level.SEVERE, null, ex);
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao deslogar", "Ocorreu um erro no sistema\nTente mais tarde.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }

    }
}
